# 创建时间：2025/5/5 星期一 15:47
# 创建人：李德才

import sys

""" 
这是Python中最直接的垃圾回收方式。每个对象都有一个引用计数器，用于记录当前有多少引用指向该对象。
每当创建一个新的引用指向该对象时，引用计数加一；当某个引用失效或被删除时，引用计数减一。
一旦某个对象的引用计数降到零，说明没有引用指向这个对象了，它占用的内存就会立即被释放。

然而，引用计数有一个显著的缺点：无法处理循环引用的情况。
例如，两个对象互相引用对方，但是除此之外没有其他的引用指向它们，这时它们实际上已经不可达了，
但由于引用计数不为零，所以不会被回收。
"""


class Node:
    def __init__(self):
        print(f'创建了一个节点，值为{id(self)}')


n1 = Node()
print("n1 = Node() 引用计数：", sys.getrefcount(n1))  # 输出为 2 ，因为 n1 和 sys.getrefcount(n1) 都引用了 n1
n2 = n1
print("n2 = n1 引用计数：", sys.getrefcount(n2))  # 输出为 3
del n1
print(" del n1 引用计数：", sys.getrefcount(n2))  # 输出为 2

list1 = [n2]
print("list1.append(n2) 引用计数：", sys.getrefcount(n2))

print("引用计数：")  # 输出为 2

n3 = Node()  # 创建一个新的节点，这样和 n1, n2 就没有关系了
print("引用计数：", sys.getrefcount(n3))  # 输出为 2
